/*
 * Description: log header file.
 */

#ifndef LOG_H
#define LOG_H

#include "spdlog/spdlog.h"
#include <iostream>

namespace COMMON {
#ifdef FORMAT
#undef FORMAT
#endif

#ifdef LOG_ERR
#undef LOG_ERR
#endif

#ifdef LOG_WARN
#undef LOG_WARN
#endif

#ifdef LOG_INFO
#undef LOG_INFO
#endif

#ifdef LOG_DEBUG
#undef LOG_DEBUG
#endif

#ifdef LOG_CRITICAL
#undef LOG_CRITICAL
#endif

#ifdef SPDLOG_ACTIVE_LEVEL
#undef SPDLOG_ACTIVE_LEVEL
#endif

#ifdef SPDLOG_TRACE_ON
#undef SPDLOG_TRACE_ON
#endif

#ifdef SPDLOG_DEBUG_ON
#undef SPDLOG_DEBUG_ON
#endif

#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_TRACE
#define SPDLOG_TRACE_ON
#define SPDLOG_DEBUG_ON

#define FORMAT(x) "{}"

#define LOG_TRACE(...) SPDLOG_TRACE(__VA_ARGS__)
#define LOG_DEBUG(...) SPDLOG_DEBUG(__VA_ARGS__)
#define LOG_INFO(...) SPDLOG_INFO(__VA_ARGS__)
#define LOG_WARN(...) SPDLOG_WARN(__VA_ARGS__)
#define LOG_ERR(...) SPDLOG_ERROR(__VA_ARGS__)
#define LOG_CRITICAL(...) SPDLOG_CRITICAL(__VA_ARGS__)

class Log {
public:
    Log() = default;
    ~Log() = default;
    static void Init(std::string logName, std::string logPath);
};
}

#endif // LOG_H
